import axios from 'axios'
import Vue from 'vue'
import {Message} from 'element-ui'; // 引入Message组件
import {aesDecrypt, aesEncrypt, encodeAesKey, generateKey} from "@/untils/security.js";

Vue.prototype.$message = Message;

// 基础配置
// axios.defaults.baseURL = process.env.VUE_APP_BASE_HOST;
axios.defaults.baseURL = process.env.VUE_APP_BASE_HOST

// 设置请求超时
axios.defaults.timeout = 100000;

const aeskey = generateKey()

// 请求拦截器
axios.interceptors.request.use((config) => {
    // 在发送请求之前做什么
    config.headers['Authentication'] = localStorage.getItem('token')
    if (!(config.data instanceof FormData)) {
        config.headers['Content-Type'] = 'application/json';
    }
    config.headers['clinicId'] = JSON.parse(localStorage.getItem("userInfo") || "{}").clinicId ?? '';
    //参数加密开关
    if (JSON.parse(process.env.VUE_APP_PARAM_ENCRYPTION)) {
        config.headers['security'] = encodeAesKey(aeskey)
        config.data = aesEncrypt(JSON.stringify(config.data), aeskey)
    }
    console.log("config:", config.data)
    return config;
}, (error) => {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 响应拦截器
axios.interceptors.response.use((response) => {
    // 对响应数据做点什么
    // 检查响应数据是否为字符串
    try {
        console.log(JSON.parse(aesDecrypt(response.data, aeskey)));
        return JSON.parse(aesDecrypt(response.data, aeskey));
        // 检查异地登录响应（假设code=601表示异地登录）
        if (data.code === 601) {
            Vue.prototype.$message({
                message: '您的账号已在其他地方登录',
                type: 'error',
                duration: 0,
                showClose: false,
                onClose: () => {
                    localStorage.clear();
                    window.location.href = "#/login";
                }
            });

            // 5秒后自动关闭并跳转
            setTimeout(() => {
                Vue.prototype.$message.closeAll();
                localStorage.clear();
                window.location.href = "#/login";
            }, 5000);

            return Promise.reject(data);
        }
    } catch {
        console.log(response.data);
        return response.data
    }
}, (error) => {
    console.log("error（错误信息：):", error)
    // 错误处理
    const {response} = error

    if (response) {
        switch (response.status) {
            case 600: // 会话过期
                Message.error(response.data.message || '登录状态已过期')
                window.localStorage.clear()
                window.location.href = "#/login"; // 跳转到登录页
                return Promise.resolve(); // 终止传播
            case 401: // 未授权
                Message.error('请先登录')
                break;
            case 403: // 无权限
                Message.error('没有操作权限')
                break;
            default:
                Message.error(response.data.message || `请求错误 ${response.status}`)
        }
    } else {
        // 处理无响应的错误（网络问题等）
        Message.error('网络连接异常，请检查网络')
    }

    return Promise.reject(error)
});

// 暴露
export default axios;